Le groupe nord-coréen Contagious Interview a publié 108 paquets et extensions piégés sur npm, Packagist, Go et Chrome dans le cadre de la campagne PolinRider. Les chercheurs de Socket ont recensé 162 versions malveillantes, diffusées via des comptes de mainteneurs compromis pour infecter les postes de développeurs et voler leurs identifiants.

Le Threat Research Team de Socket a identifié 162 artefacts de version malveillants répartis sur 108 paquets et extensions uniques. Karlo Zanki, chercheur chez Socket, y dénombre dix-neuf bibliothèques npm, dix paquets Composer, soixante et un modules Go et une extension Chrome. PolinRider utilise des comptes de mainteneurs légitimes déjà compromis, non des identifiants GitHub volés. Un développeur installe une extension VS Code ou un paquet npm piégé lors d'un entretien d'embauche fictif. Le paquet compromis dépose alors un chargeur JavaScript dans le dépôt personnel de la victime.
Les mainteneurs compromis diffusent des paquets sur quatre écosystèmes
L'équipe OpenSourceMalware a repété PolinRider en mars dans des dépôts GitHub publics infectés par une variante de BeaverTail, un logiciel malveillant déjà associé à Contagious Interview. Le 11 avril, le décompte a atteint 1 951 dépôts publics et 1 047 propriétaires distincts. Les opérateurs fusionnent ensuite PolinRider avec un second cluster, TaskJacker, qui dépose des fichiers de tâches VS Code dans des dépôts déjà existants.
Un recruteur fictif contacte un développeur sur LinkedIn, lui propose un test technique et l'invite à cloner un dépôt de démonstration. Les gabarits identifiés par OpenSourceMalware portent des noms comme ShoeVista ou StakingGame, calqués sur de fausses marques de commerce en ligne ou de jeux blockchain.
Ces fichiers .vscode/tasks.json contiennent l'option « runOn: folderOpen ». Un simple clic sur le dossier dans Visual Studio Code ou Cursor déclenche alors l'exécution du code caché, sans action supplémentaire de la victime. Les opérateurs dissimulent aussi le chargeur dans des fichiers de configuration comme vite.config.js ou eslint.config.js, avec une ligne unique remplie d'espaces blancs qui repousse le code malveillant hors du champ de vision habituel. Les attaquants camouflent une seconde variante du chargeur dans de faux fichiers de police .woff2.
Les opérateurs réécrivent également l'historique Git à coups de force push et de commits antidatés. Une relecture superficielle du dépôt n'affiche donc aucune anomalie récente. Seul l'onglet Activity de GitHub affiche les modifications réelles.
Le chargeur récupère ensuite un second module chiffré via l'infrastructure blockchain de TRON, Aptos ou BNB Smart Chain, une méthode qui contourne les listes de blocage DNS traditionnelles. InvisibleFerret, logiciel modulaire écrit en Python, exfiltre alors les identifiants du navigateur et les portefeuilles de cryptomonnaies. D'autres charges, comme DEV#POPPER ou OmniStealer, complètent l'arsenal déployé sur les postes compromis.

Sept noms différents pour un seul groupe nord-coréen
MITRE a formalisé cette identité collective en octobre 2025 sous le nom G1052, qui réunit sept appellations différentes pour un même groupe. DeceptiveDevelopment chez ESET, DEV#POPPER chez Securonix, TAG-121, Gwisin Gang, Tenacious Pungsan et PurpleBravo ne sont en fait que la même campagne d'entretiens d'embauche fictifs, active depuis 2023. Les développeurs logiciels et les professionnels de la cryptomonnaie sont la cible principale du groupe depuis cette date, selon le MITRE ATT&CK. Le groupe opère sur Windows, Linux et macOS, entre espionnage et vol financier direct.
Cette unification donne aux équipes de sécurité une base commune pour croiser les indicateurs de compromission publiés sous des noms distincts par plusieurs éditeurs.
Socket recommande de considérer tout poste ayant installé un paquet touché comme intégralement compromis. Les équipes techniques doivent changer depuis une machine saine, les secrets npm, GitHub, PyPI, RubyGems, SSH, Slack et les identifiants des pipelines CI/CD. Elles doivent supprimer ensuite les versions infectées et reconstruire l'environnement à partir d'un fichier de verrouillage sain. Elles doivent enfin vérifier la présence de l'option « runOn: folderOpen » dans les fichiers de tâches de chaque dépôt personnel.
La campagne reste active. De nouveaux paquets infectés apparaissent à mesure que les opérateurs obtiennent l'accès à des comptes de mainteneurs supplémentaires.